#ifndef __PAIRE_HPP__
#define __PAIRE_HPP__

#include <gmpxx.h>
#include <iostream>
#include <mpi.h>
#include <cstdlib>

using namespace std;


class Paire
{
   protected :
      mpz_class _paire[2];
      
   public :
      Paire()
      {
         _paire[0] = 0;
         _paire[1] = 0;
      }
      
      Paire(mpz_class & a, mpz_class & b)
      {
         _paire[0] = a;
         _paire[1] = b;
      }
      
      ~Paire() { }
      
      mpz_class getPaire (int inIndice) const
      {
         if(inIndice == 0 || inIndice == 1)
         {
            return _paire[inIndice];
         }
         printf("Erreur pour GetVPair ! \n On sort !\n");
         exit(-1);
      }
      
      Paire & operator=(const Paire & inPaire)
      {
         _paire[0] = inPaire._paire[0];
         _paire[1] = inPaire._paire[1];
         
         return *this;
      }
      
      mpz_class * getPaire() { return _paire; }
      
      void setPaire(mpz_class inX, mpz_class inY)
      {
         _paire[0] = inX;
         _paire[1] = inY;
      }
      
      bool isNull()
      {
         if( ( ! mpz_cmp_ui(_paire[0].get_mpz_t(),0 ) ) && (! mpz_cmp_ui(_paire[1].get_mpz_t(), 0 ) ) )
         {
            return true;
         }
         return false;
      }
      
      
      char * converMPI() const;
      
      void converPaire(char * inChaine);
      
      friend ostream & operator << (ostream & o, const Paire & inPaire);
      
};

#endif
